(function (window) {
  let Util = {}
  Util.processError = function (vm, res) {
    /*let msg = ''
    if (res) {
      if (res.code && res.code != '0') {
        if (res.code == '1001') {
          msg = '传入参数为空'
        } else if (res.code == '1102') {
          msg = '名称已存在'
        } else if (res.code == '7004') {
          msg = '参数传入错误'
        } else if (res.code == '5') {
          // vm.$router.push('/')
          return false
        }else {
          msg = '加载失败,请刷新后重试'
        }
        vm.$message({
          type: 'error',
          center:true,
          message: msg
        });
      }
    }else if(res.code == '0'){

    } else {
      msg = '网络错误，请稍后重试!'
      vm.$message({
        type: 'error',
        center:true,
        message: msg
      });
    }*/
    // return false
  }

  /**
   * 作者 moming
   * 日期 20170710
   * 处理所有的vue-axios的response 并判断是否成功
   * 2个回调函数, 处理成功和失败
   *
   */
  Util.processRes = function(response, sucessCallback, failCallback) {
    if (sucessCallback){
      sucessCallback.call(response, response.object)
    }
    if (failCallback) {
      failCallback.call(response, response.object)
    }
  }

  /**
   * 作者 小雨
   * 日期 20190315
   * 处理时间
   * 2个回调函数
   * date：传入时间
   * format： 传入时间类型
   *
   */

  Util.getTime = function(date,format){
    let yy = new Date(date).getFullYear();
    let mm = (new Date(date).getMonth()+1 > 9) ? new Date(date).getMonth()+1 : '0'+ (new Date(date).getMonth()+1);
    let dd = (new Date(date).getDate() > 9) ? new Date(date).getDate() : '0'+ new Date(date).getDate();
    let hh = (new Date(date).getHours() > 9) ? new Date(date).getHours() : '0'+ new Date(date).getHours();
    let min = (new Date(date).getMinutes() > 9) ? new Date(date).getMinutes() : '0'+ new Date(date).getMinutes();
    let ss = (new Date(date).getSeconds() > 9) ? new Date(date).getSeconds() : '0'+ new Date(date).getSeconds();

    switch (format) {
      case 'yy-mm':
        return date =  `${yy}-${mm}`;
        break;
      case 'yy-mm-dd':
        return date =  `${yy}-${mm}-${dd}`;
        break;
      case 'yy-mm-dd hh:min':
        return date =  `${yy}-${mm}-${dd} ${hh}:${min}`;
        break;
      case 'yy-mm-dd hh:min:ss':
        return date =  `${yy}-${mm}-${dd} ${hh}:${min}:${ss}`;
        break;
      default:
        return date =  `${yy}-${mm}-${dd} ${hh}:${min}:${ss}`;
    }

  }

// 数组或者对象的深拷贝

  Util.deepCopy= function(obj) {
    let result = typeof  obj.splice === "function" ? [] : {};
    if (obj && typeof obj === 'object') {
      for (let key in obj) {
        if (obj[key] && typeof obj[key] === 'object') {
          result[key] = Util.deepCopy(obj[key]);//如果对象的属性值为object的时候，递归调用deepClone,即在吧某个值对象复制一份到新的对象的对应值中。
        } else {
          result[key] = obj[key];//如果对象的属性值不为object的时候，直接复制参数对象的每一个键值到新的对象对应的键值对中。
        }
      }
      return result;
    }
    return obj;
  }

   //排序
   Util.compare = function(index) {
    return function (obj1,obj2) {
      let value1 = obj1[index];
      let value2 = obj2[index];
      if(value2 < value1) {
        return 1;
      } else if (value1 < value2) {
        return -1;
      } else {
        return 0
      }
    }
  },


  // 第一步： 将你要修改的数组传进去
  // 第二步：确定要将什么id设置成ID
  // 第三步： 这一步其实可以不要  就是要设置的目标
  // 第四步：循环元数组，将原数组中的数据新增并复制给新数组
  /**
   *  给数组中set一项数据
   * @param metaArr  元数组
   * @param metaId   元id
   * @param goalId  目标id
   * @returns {Array}  返回结果
   */
  Util.setID= function(metaArr = [], metaId = '', goalId = 'value') {
    let arr = [];
    metaArr.length && metaArr.forEach( item => {
      let obj = {}
      obj = item
      obj[goalId] = item[metaId] ?  item[metaId] : ''
      arr.push(obj)
    })
    return arr
  }

  Util.loading =function (vm) {
    console.log(vm)
    return vm.$loading({
      target:document.body,
      lock: true,
      text: '拼命加载中...',
    });
  }
  Util.close = function () {
    this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
      Util.loading.close()
    });
  }
  //设置localStorage
  Util.setLocalStorage = function(key,value){
    localStorage.setItem(key,value);
  }
  Util.getLocalStorage = function(key){
    return localStorage.getItem(key);
  }
  Util.removeLocalStorage = function(key){
    return localStorage.removeItem(key);
  }
  //设置sessionStorage
  Util.setSessionStorage = function(key,value){
    sessionStorage.setItem(key,value);
  }
  Util.getSessionStorage = function(key){
    return sessionStorage.getItem(key);
  }
  Util.removeSessionStorage = function(key){
    return sessionStorage.removeItem(key);
  }
  window.Util = Util
}) (window)

export default {
  install: function (Vue) {
    Vue.Util
  }
}
